import Crypto from '@/ControlTower/crypto.js'
// 同步储存  
export default {
	install(Vue, options) {
		const prefix = options.prefix || 'your_prefix_'; // 设置存储前缀 
		const {
			encrypt,
			decrypt
		} = Crypto.install(Vue, options);
		/**
		 * 设置本地存储数据
		 * @param {string} key 存储的键名
		 * @param {any} value 存储的值
		 * @param {number} expireTime 过期时间（单位：毫秒），可选参数 24 * 60 * 60 * 1000; // 过期时间为一天
		 */
		const setStorage = (key, value, expireTime) => {
			const currentTime = new Date().getTime();
			const expireAt = expireTime ? currentTime + expireTime : 0;
			// const data = value;
			const data = {
				value: encrypt(value, key), // 加密存储的数据
				expireAt,
			};
			uni.setStorageSync(prefix + key, JSON.stringify(data));
		};

		/**
		 * 获取本地存储数据
		 * @param {string} key 存储的键名
		 * @returns {any} 返回存储的值，如果过期或不存在则返回null
		 */
		const getStorage = (key) => {
			const data = uni.getStorageSync(prefix + key);
			if (data) {
				const {
					value,
					expireAt
				} = JSON.parse(data);
				/* const value = JSON.parse(data);
				return value; */
				if (expireAt === 0 || new Date().getTime() < expireAt) {
					return decrypt(value, key); // 解密获取到的数据
				} else {
					removeStorage(key); // 超过时间限制，清除数据
					return null;
				}
			} else {
				return null;
			}
		};

		/**
		 * 删除本地存储数据
		 * @param {string} key 存储的键名
		 */
		const removeStorage = (key) => {
			uni.removeStorageSync(prefix + key);
		};
		return {
			$storage: {
				set: setStorage,
				get: getStorage,
				remove: removeStorage,
			},
			encrypt,
			decrypt
		}
	}
};